先前提到那麼多 Redux ,也來看看 Redux 官方提到的推薦寫法吧 - Redux Toolkit
Redux Toolkit旨在成為編寫 Redux 邏輯的標準方式。
它的創建是為了幫助解決關於 Redux 的三個常見問題
Redux Toolkit主要包含以下APIs:
configureStore():
在 redux 中原本就有 createStore
這個方法,而透過 configureStore()
可以簡化createStore
設定的流程、結合 slice reducers、添加和 Redux 有關的 middleware、並可使用 Redux DevTools的擴充,包含redux-thunk。
createReducer():
此功能是提供一張action type和reducer的查找表,而非使用switch語法。
createAction():
這個工具會根據 action type 回傳對應的 action creator function,這個函式本身內建 toString()
,因此可以不再額外定義 TYPE 常數。能有效簡化在 redux 中需要先定義 action type 的常數,以及在 action 中載入這個 action type 常數的冗長步驟。
補充:action 是一個帶有 type 和 payload 的「物件」;action creator 是一個會產生 action 的「函式」。因此,這裡的 createAction 實際上是產生一個 action creator 而不是產生一個 action。
createSlice():
它能帶入 reducer functions, slice name,以及initial state value。 且自動生成含有對應 action creators 和 action types的slice reducer 。
透過 createSlice 將自動產生action creators和action types,說到這邊大家有發現createSlice好像有包含createAction 和 createReducer的類似功能了吧,如果能夠在一個地方同時建立 action creator、reducers 的話,管理更為方便。
createAsyncThunk:
用來處理非同步,會接受一個 action type 和一個回傳 promise 的 callback function,最後回傳一個 thunk action creator。
createEntityAdapter:
生成一組預設 reducer 和selector,用於對數據及狀態執行 CRUD 操作。
createSelector:
來自 Reselect library,RTK 重新匯出讓他更容易使用。
補充:
thunk為一個能在其中呼叫另一個子程序(subroutine)的子程序。
將這個概念用在Redux-Thunk上,便是包裝一個action creator為一個thunk。原生概念的action creator是回傳一個action(object);而若是「thunk化」的action creator,則回傳一個function。在Redux中藉由Redux-Thunk這個Redux Middleware讓我們可以在使用時不去區分pure action creator還是thunk action creator
明天再在帶大家來解讀官網的程式碼,感謝閱讀~